package computacaografica;
import java.util.ArrayList;

public class Matriz {

	private int colunas, linhas;

	private double[][] matriz;

	/**
	 * Construtor de uma matriz com elementos nulos.
	 *
	 * @param linhas
	 *            Quantidade de linhas da matriz.
	 * @param colunas
	 *            Quantidade de colunas da matriz.
	 */
	public Matriz(int lin, int col) {
		this.colunas = lin;
		this.linhas = col;
		this.matriz = new double[lin][col];
	}

	public String toString() {
		String saida = "";
		for (int i = 0; i < this.colunas; i++) {
			for (int j = 0; j < this.linhas; j++) {
				saida += matriz[i][j] + " ";
			}
			saida += "\n";
		}
		return saida;
	}

	protected void setLinha(int indice, double[] linha){
		this.matriz[indice] = linha;
	}

	public double[] getLinha(int indice) {
		return this.matriz[indice];
	}

	public double[] getColuna(int indice) {
		double[] coluna = new double[this.colunas];
		for (int i = 0; i < this.linhas; i++) {
			for (int j = 0; j < this.colunas; j++) {
				if (i == indice)
					coluna[j] = this.matriz[j][i];
			}
		}
		return coluna;
	}

	protected void setElemento(int iLinha, int iColuna, double e) {
		this.matriz[iLinha][iColuna] = e;
	}

	private double eleMult(int iLinha, int iColuna, Matriz outra) {
		double elem = 0;
		double[] linha = getLinha(iLinha);
		double[] coluna = outra.getColuna(iColuna);

		for (int i = 0; i < linhas; i++) {
			elem += linha[i] * coluna[i];
		}
		return elem;
	}

	public Matriz multiplica(Matriz outra) {
		Matriz resultado = new Matriz(linhas,outra.getColunas());
		for (int i = 0; i < linhas; i++) {
			for (int j = 0; j < outra.getColunas(); j++) {
				resultado.setElemento(i, j, eleMult(i,j,outra));
			}
		}
		return resultado;
	}

	public int getLinhas() {
		return linhas;
	}

	public int getColunas() {
		return colunas;
	}

	public Matriz transforma(Matriz indices){
		return multiplica(indices);
	}
}
